package org.edu.modules.oa.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.edu.modules.oa.entity.VeFileFilesEntity;
import org.edu.modules.oa.entity.VeOaDocumentEntity;
import org.edu.modules.oa.vo.VeOaDocumentVo;

import java.util.HashMap;
import java.util.List;

public interface IVeOaPersonDocumentService extends IService<VeOaDocumentEntity> {

    // 根据父级ID查询      查询条件--名称，文档编号，上传人，上传时间  (删除字段)
    // 进入下一级          where PARENT_ID = 选中的文件夹的ID  文件不可进入
    HashMap<String,Object> selectDocument(VeOaDocumentEntity veOaDocumentEntity,Integer startPage,Integer pageSize);

    //查看详情 --文件doc表+附件
    VeOaDocumentVo seeDocDetail(VeOaDocumentEntity veOaDocumentEntity);

    //同级下对文件（夹）名重复校验
    VeOaDocumentEntity checkNameByPid(VeOaDocumentEntity veOaDocumentEntity);


    // 返回上一级          where ID =  当前父级ID   where PARENT_ID= 搜出父级ID  （搜出）返回到父级ID为0时不可返回
    HashMap<String,Object> backToUpLevel(VeOaDocumentEntity veOaDocumentEntity,Integer startPage,Integer pageSize,Integer isDelete,String docType);


    //添加文件和文件信息
    Integer addDocFile(VeOaDocumentEntity veOaDocumentEntity, VeFileFilesEntity veFileFilesEntity);


    //新建文件夹
    Integer addDocDir(VeOaDocumentEntity veOaDocumentEntity);


    //修改文件(夹)doc信息，上传的附件信息
    Integer updateDocFileDir(VeOaDocumentEntity veOaDocumentEntity, VeFileFilesEntity veFileFilesEntity);


    //逻辑删除（单/多） 权限在controller判断文件和最外层的文件夹
    //每个id查有无下级  递归  （用id的集合 查是否为文件夹）
    //判断权限 1.上传人者是否为本人 2是否共享 ，否就不能操作 3.可CRUD人员id字段里有无自己的USERID
    // 文件夹时  查文件夹所在where ID = 当前ID时的父级ID 的可删除人员id，有就调用自己删
    // 文件时    where ID =  当前选中文件ID的可删除人员id，有就删
    // 最后删自己
    Integer deleteDocument(Long id);


    //导出当前页记录   根据父级ID查询   查询条件--名称，文档编号，上传人，上传时间  (删除字段)
    List<VeOaDocumentVo> export(VeOaDocumentEntity veOaDocumentEntity,Integer startPage,Integer pageSize);


    //可删除权限  单/多
    Integer checkDeletePower(Long id);

    //可增加文件（夹）权限  在文件夹下  单
    Integer checkAddDocDirPower(VeOaDocumentEntity veOaDocumentEntity);

    //可查看详情 文件/文件夹  权限  单
    Integer checkSeeDetailPower(Long id);

    //可修改文件/文件夹  权限   单
    Integer checkUpdatePower(Long id);


}
